package hot100;

import java.util.Stack;

/**
 * 155. 最小栈
 * 优化解法，用一个min变量代替代替之前的栈
 * 1.入栈时如果元素小于等于当前最小值，先将当前的最小值入栈，用于以后出栈后更新最小值
 *  * 2.出栈时，如果出栈的元素为min，就再出栈一次并把这次元素赋给min
 */
class MinStack {
    Stack<Integer> stack;
    int min;
    public MinStack() {
        stack = new Stack<>();
        min = Integer.MAX_VALUE;
    }

    public void push(int val) {
        if (val <= min) {
            stack.push(min);
            min = val;
        }
        stack.push(val);
    }

    public void pop() {
        if (stack.pop() == min) {
            min = stack.pop();
        }
    }

    public int top() {
        return stack.peek();
    }

    public int getMin() {
        return min;
    }
}
